Motion.SetAxisCyclicSwitch 方法
使用軸位置來控制重複觸發數位輸出的開關。當軸達到特定的位置,開關即開啟或關閉,開關可透過軸向前或向後移動的方向來控制。
命名空間:IntervalZero.KINGSTAR.Local.Api
組合: IntervalZero.KINGSTAR.Local.Api (於 IntervalZero.KINGSTAR.Local.dll) 版本:4.4.0.0
語法
public KsCommandStatus SetAxisCyclicSwitch(
int Index,
McOutput Output,
double StartPosition,
McCamSwitch CyclicSwitch,
McLengthType IntervalType,
double Interval,
McLengthType DurationType,
double Duration,
McSource ValueSource
)
Public Function SetAxisCamSwitch(
Index As Integer,
Output As McOutput,
StartPosition As Double,
CyclicSwitch As McCamSwitch,
McLengthType As IntervalType,
Interval As Double,
DurationType As McLengthType,
Duration As Double,
ValueSource As McSource
) As KsCommandStatus
參數
Index [in]
型別:int
軸索引。索引以 0 為起始;別名將影響此參數。
Output [in]
型別:McOutput
選擇對應軌道所控制的數位輸出。
StartPosition [in]
型別:double
週期開始的位置。
CyclicSwitch [in]
型別:McCamSwitch
控制開關動作。
- TrackNumber:值必須為零。
- FirstOnPosition:值必須為非負,為各週期開始位置相關的距離。
- LastOnPosition:值必須為正,且較 FirstOnPosition 為大,為各週期開始位置相關的距離。
- Duration:值必須為正。
IntervalType [in]
型別:McLengthType
Interval 類型。可使用 mcDistance 與 mcTime。
Interval [in]
型別:double
週期長度。依照所選的 IntervalType 而定,值必須為正。
DurationType [in]
型別:McLengthType
Duration 類型。可使用 mcDistance 與 mcCount。
Duration [in]
型別:double
週期重複的持續時間,依照所選的 DurationType 而定,值必須為正。
ValueSource [in]
型別:McSource
定義軸值的來源,例如:位置。參見 McSource。
- mcCommandedValue, mcSetValue – 同步設定值。建議使用此設定。
- mcActualValue – 同步實際值。此設定可能不穩定。
- mcSecondEncoderValue – 從第二編碼器讀取的實際值。
回傳值
回傳 KsCommandStatus 類別。
備註
- McCamSwitch 為供應商特定的類別,用於定義數位凸輪的開關。
- McOutput 為供應商特定的結構,用於連接至(實體)輸出,若使的是您個人的伺服驅動器的數位輸出 (DO),需在 Api.Start 前使用 Api.EnableAxisOutput。
- 在 McCamSwitch 類別中,當 CamSwitchMode 選擇為位置時不支援以下組合:
- IntervalType: mcTime;DurationType: mcDistance.
- IntervalType: mcTime;DurationType: mcCount.
- 當模數軸啟用時,SetAxisCyclicSwitch 將不受影響,軸不會將位置視為模數位置。例如,若模數值為 360,當 FirstOnPosition 設為 360,LastOnPosition 設為 540,則軸旋轉 1 圈時觸發開啟,旋轉 1.5 圈時觸發關閉。啟用模數軸後,建議使用者:
- 使用 SetAxisPositionOffset 重設位置,以防止顯示位置與內部位置不一致。例如,當模數值設為 360 時,使用者可能會看到位置為 0,而內部位置為 360000。
- 使用速度或距離 API 來觸發開關。
範例
N/A
使用案例:
以下案例雖來自於 RT/Win32 介面,但有助於理解週期開關的運作方式。
案例 1
循環開關在持續時間內完成其任務。
McOutput outputBit = {
FALSE, //Axis or IO module. FALSE = I/O.
0, //Index
0 //Offset
}
McCamSwitch cyclicSwitch = {
0, //TrackNumber
40, //FirstOnPosition
60, //LastOnPosition
1, //AxisDirection. 1 = Positive.
0, //CamSwitchMode. 0 = Position.
0 //Duration. It is not used in this case.
);
Command = SetAxisCyclicSwitch(
TargetAxis, //Index
outputBit, //Output
100, //StartPosition
cyclicSwitch, //CyclicSwitch
mcDistance, //IntervalType
100, //Interval
mcDistance, //DurationType
250, //Duration
mcSetValue //ValueSource
);
案例 2
循環開關在完成任務之前中止。
McOutput outputBit = {
FALSE, //Axis or IO module. FALSE = I/O.
0, //Index
0 //Offset
}
McCamSwitch cyclicSwitch = {
0, //TrackNumber
0, //FirstOnPosition
0, //LastOnPosition
1, //AxisDirection. 1 = Positive.
1, //CamSwitchMode. 1 = Time.
0.003 //Duration
);
Command = SetAxisCyclicSwitch(
TargetAxis, //Index
outputBit, //Output
100, //StartPosition
cyclicSwitch, //CyclicSwitch
mcTime, //IntervalType
0.005, //Interval
mcCount, //DurationType
3, //Duration
mcSetValue //ValueSource
);
參見